import axios from 'axios' // 导入axios库
import config from '../config' // 导入config配置文件
const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro // 根据当前环境选择baseUrl

class HttpRequest {
    constructor(baseUrl) { // 定义HttpRequest类，构造函数接收baseUrl参数
        this.baseUrl = baseUrl // 将传入的baseUrl赋值给实例属性
    }

    getInsideConfig() { // 定义一个方法用于获取内部配置
        const config = { // 创建一个配置对象
            baseUrl: this.baseUrl, // 设置baseUrl属性为实例的baseUrl
            header: {} // 初始化header为空对象
        }
        return config // 返回配置对象
    }

    // 拦截器
    interceptors(instance) { // 定义拦截器方法，接收一个axios实例参数
        instance.interceptors.request.use(function (config) { // 请求拦截器，拦截请求发送前的操作
            return config // 返回请求配置
        }, function (error) {
            return Promise.reject(error); // 捕获错误并返回一个异常
        });
        instance.interceptors.response.use(function (response) { // 响应拦截器，拦截后端响应数据
            return response; // 返回响应数据
        }, function (error) {
            return Promise.reject(error) // 捕获错误并返回一个异常
        });
    }

    request(options) { // 定义一个发送请求的方法，接收options参数
        const instance = axios.create() // 创建一个axios实例
        options = { ...this.getInsideConfig(), ...options } // 合并传入的参数和内部配置
        this.interceptors(instance) // 调用拦截器方法
        return instance(options) // 发送请求并返回请求实例
    }
}

export default new HttpRequest(baseUrl) // 导出一个新的HttpRequest实例，并传入baseUrl参数
